/**
* Created with CLion.
* User:Lenovo
* Date:2023-04-14
* Time:14:43
* Description:顺序表
*/

#include "SeqList.h"

void TestSeqList1()
{
    SL s;
    SLInit(&s);

    SLPushBack(&s, 1);
    SLPushBack(&s, 2);
    SLPushBack(&s, 3);
    SLPushBack(&s, 4);
    SLPushBack(&s, 5);
    SLPushBack(&s, 6);
    SLPushBack(&s, 7);
    SLPushBack(&s, 8);

    SLPrint(&s);
    SLDestroy(&s);
}

void TestSeqList2()
{
    SL s;
    SLInit(&s);

    SLPushBack(&s, 1);
    SLPushBack(&s, 2);
    SLPushBack(&s, 3);
    SLPushBack(&s, 4);
    SLPushFront(&s, 5);
    SLPushFront(&s, 6);
    SLPushFront(&s, 6);
    SLPushFront(&s, 7);
    SLPushFront(&s, 6);

    SLPrint(&s);
    SLDestroy(&s);
}

void TestSeqList3()
{
    SL s;
    SLInit(&s);

    SLPushBack(&s, 1);
    SLPushBack(&s, 2);
    SLPushBack(&s, 3);
    SLPushBack(&s, 4);
    SLPushFront(&s, 5);
    SLPushFront(&s, 6);
    SLPrint(&s);

    SLPopBack(&s);
    SLPopBack(&s);
    SLPrint(&s);

    SLPopBack(&s);
    SLPopBack(&s);
    SLPrint(&s);

    SLPushBack(&s, 1);
    SLPushBack(&s, 2);
    SLPushBack(&s, 3);
    SLPushBack(&s, 4);

    SLDestroy(&s);
}

void TestSeqList4()
{
    SL s;
    SLInit(&s);

    SLPushBack(&s, 1);
    SLPushBack(&s, 2);
    SLPushBack(&s, 3);
    SLPushBack(&s, 4);
    SLPrint(&s);

    SLPopFront(&s);
    SLPopFront(&s);
    SLPopFront(&s);
    SLPrint(&s);

    SLDestroy(&s);
}

void TestSeqList5()
{
    SL s;
    SLInit(&s);

    SLPushBack(&s, 1);
    SLPushBack(&s, 2);
    SLPushBack(&s, 3);
    SLPushBack(&s, 4);
    SLPushBack(&s, 5);
    SLPushBack(&s, 6);
    SLPrint(&s);

    SLInsert(&s, 30, 2);
    SLPrint(&s);

    SLDestroy(&s);
}

void TestSeqList6()
{
    SL s;
    SLInit(&s);

    SLPushBack(&s, 1);
    SLPushBack(&s, 2);
    SLPushBack(&s, 3);
    SLPushBack(&s, 4);
    SLPushBack(&s, 5);
    SLPushBack(&s, 6);
    SLPrint(&s);

    SLInsert(&s, 30, 2);
    SLPrint(&s);

    SLErase(&s, 3);
    SLPrint(&s);

    SLDestroy(&s);
}

void TestSeqList7()
{
    SL s;
    SLInit(&s);

    SLPushBack(&s, 1);
    SLPushBack(&s, 2);
    SLPushBack(&s, 3);
    SLPushBack(&s, 4);
    SLPushBack(&s, 5);
    SLPushBack(&s, 6);
    SLPrint(&s);

    int pos = SLFind(&s, 6);
    if (pos != -1)
    {
        SLErase(&s, pos);
    }
    SLPrint(&s);

    SLDestroy(&s);
}

int main()
{
    // 1.线性表
    //具有 n 个相同特性的数据元素的有限序列 - 在逻辑上是线性结构，但是物理结构上不一定
    //常见的线性表：顺序表，链表，栈，队列，字符串 ...

    // 2.顺序表
    //存储单元的物理地址连续，一般采用数组存储
    //分类：静态顺序表，动态顺序表
    //静态顺序表的缺陷：空间写死，给小了不够用，给多了浪费

    TestSeqList1();
    TestSeqList2();
    TestSeqList3();
    TestSeqList4();
    TestSeqList5();
    TestSeqList6();
    TestSeqList7();

    return 0;
}
